import request from '@/utils/request'

// API响应接口
export interface ApiResponse<T> {
  code: number
  msg: string
  data: T
}

// 图片生成图片请求参数
export interface Img2ImgRequest {
  prompt: string            // 提示词
  negativePrompt?: string   // 负面提示词
  initImage: string         // 初始图片（Base64格式）
  modelName?: string        // 模型名称
  width?: number            // 图像宽度
  height?: number           // 图像高度
  steps?: number            // 采样步数
  cfgScale?: number         // CFG缩放系数
  seed?: number             // 种子值
  denoisingStrength?: number // 降噪强度
  batchSize?: number        // 批量大小
}

// 图片生成图片响应
export interface Img2ImgResponse {
  id: number                // 记录ID
  taskId: string            // 任务ID
  status: 'pending' | 'processing' | 'success' | 'failed'  // 任务状态
  prompt: string            // 提示词
  negativePrompt?: string   // 负面提示词
  modelName?: string        // 模型名称
  width?: number            // 图像宽度
  height?: number           // 图像高度
  steps?: number            // 采样步数
  cfgScale?: number         // CFG缩放系数
  seed?: number             // 种子值
  samplerName?: string      // 采样器名称
  scheduler?: string        // 调度器
  denoisingStrength?: number // 降噪强度
  modelHash?: string        // 模型哈希
  batchSize?: number        // 批量大小
  restoreFaces?: boolean    // 是否恢复面部
  tiling?: boolean          // 是否平铺
  enableHr?: boolean        // 是否启用高分辨率
  hrScale?: number          // 高分辨率缩放
  hrUpscaler?: string       // 高分辨率放大器
  hrSecondPassSteps?: number // 高分辨率二次通过步数
  generationTime?: number   // 生成耗时(毫秒)
  errorMessage?: string     // 错误信息
  imageUrls?: string | string[]  // 生成的图像URL数组（可能是JSON字符串或已解析的数组）
  imageUrl?: string         // 图像URL（兼容处理）
  initImageUrl?: string     // 初始图像URL
  createTime: string        // 创建时间
  updateTime: string        // 更新时间
  deleted?: number          // 是否删除
}

// 分页数据接口
export interface PageDTO<T> {
  records?: T[]             // 记录列表
  list?: T[]                // 记录列表(兼容)
  total: number             // 总记录数
  size?: number             // 每页大小
  current?: number          // 当前页码
  pages?: number            // 总页数
}

// 模型配置接口
export interface ModelConfig {
  id: number                // 配置ID
  modelName: string         // 模型名称
  displayName: string       // 显示名称
  description: string       // 描述
  positivePrompt?: string   // 正面提示词
  negativePrompt?: string   // 负面提示词
  steps: number             // 步数
  samplerName: string       // 采样器
  scheduler: string         // 调度器
  cfgScale: number          // CFG缩放
  seed?: number             // 种子
  defaultWidth: number      // 默认宽度
  defaultHeight: number     // 默认高度
  modelHash?: string        // 模型哈希
  modelFile?: string        // 模型文件
  version?: string          // 版本
  denoisingStrength?: number// 降噪强度
  batchSize?: number        // 批量大小
  restoreFaces?: boolean    // 是否恢复面部
  tiling?: boolean          // 是否平铺
  enableHr?: boolean        // 是否启用高分辨率
  hrScale?: number          // 高分辨率缩放
  hrUpscaler?: string       // 高分辨率放大器
  hrSecondPassSteps?: number// 高分辨率二次通过步数
  enabled: boolean          // 是否启用
  createTime: string        // 创建时间
  updateTime: string        // 更新时间
}

/**
 * 执行动漫风格图片生成
 * @param data 图片生成请求参数
 * @returns 生成响应
 */
export function generateAnimeStyle(data: Img2ImgRequest) {
  return request({
    url: '/api/img2img/anime',
    method: 'post',
    data
  }) as Promise<ApiResponse<Img2ImgResponse>>
}

/**
 * 执行吉卜力风格图片生成
 * @param data 图片生成请求参数
 * @returns 生成响应
 */
export function generateGhibliStyle(data: Img2ImgRequest) {
  return request({
    url: '/api/img2img/ghibli',
    method: 'post',
    data
  }) as Promise<ApiResponse<Img2ImgResponse>>
}

/**
 * 检查服务健康状态
 * @returns 服务健康状态
 */
export function checkServiceHealth() {
  return request({
    url: '/api/img2img/health',
    method: 'get'
  }) as Promise<ApiResponse<Record<string, any>>>
}

/**
 * 根据任务ID查询生成记录
 * @param taskId 任务ID
 * @returns 生成记录
 */
export function getTaskById(taskId: string) {
  return request({
    url: `/api/img2img/task/${taskId}`,
    method: 'get'
  }) as Promise<ApiResponse<Img2ImgResponse>>
}

/**
 * 分页查询生成记录
 * @param page 页码
 * @param size 每页大小
 * @param status 状态过滤
 * @param modelName 模型名称过滤
 * @returns 分页数据
 */
export function getPage(page: number = 1, size: number = 10, status?: string, modelName?: string) {
  return request({
    url: '/api/img2img/page',
    method: 'get',
    params: { page, size, status, modelName }
  }) as Promise<ApiResponse<PageDTO<Img2ImgResponse>>>
}

/**
 * 获取统计信息
 * @returns 统计信息
 */
export function getStats() {
  return request({
    url: '/api/img2img/stats',
    method: 'get'
  }) as Promise<ApiResponse<Record<string, any>>>
} 